package mx.gob.imss.reiman.clientes.web.beans;

import java.io.IOException;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.xml.soap.SOAPException;

import mx.gob.imss.reiman.clientes.exception.JsonException;
import mx.gob.imss.reiman.clientes.model.mensajes.Mensaje;
import mx.gob.imss.reiman.clientes.service.ArchivoService;
import mx.gob.imss.reiman.clientes.service.CargaService;
import mx.gob.imss.reiman.clientes.service.MensajeriaService;
import mx.gob.imss.reiman.clientes.util.EndPoints;
import mx.gob.imss.reiman.clientes.web.util.FacesUtils;

import org.apache.xmlbeans.XmlException;
import org.primefaces.event.FileUploadEvent;

/**
 * 
 * @author Alberto Dzul Calvillo
 * @version 1.0
 * 
 */
@ManagedBean(name = "registroPAMultiple")
@SessionScoped
public class IMPRegistraMuchosMB extends Bean {
	private static final long serialVersionUID = 1L;
	private List<Mensaje> mensajes;
	@ManagedProperty("#{cargaPAService}")
	private CargaService cargaService;
	@ManagedProperty("#{archivoService}")
	private ArchivoService archivoService;
	@ManagedProperty("#{registroPAService}")
	private MensajeriaService mensajeriaService;

	public IMPRegistraMuchosMB() {
		super();
		mensajes = new ArrayList<Mensaje>();
	}

	public void carga(FileUploadEvent event) {
		System.out.println("registrando muchos ...");
		logger.info("registrarPAMuchos");
		mensajes = new ArrayList<Mensaje>();
		try {
			mensajes = cargaService.carga(archivoService.guarda(event.getFile()));
			
			for (Mensaje mensaje : mensajes) {
				mensajeriaService.enviar(mensaje, EndPoints.REGISTRAR_PA);
				try {
					Thread.sleep(1000);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (MalformedURLException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.endpoint"));
			e.printStackTrace();
		} catch (UnsupportedOperationException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.metodo"));
			e.printStackTrace();
		} catch (XmlException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.xml"));
			e.printStackTrace();
		} catch (SOAPException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.soap"));
			e.printStackTrace();
		} catch (IOException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.io"));
			e.printStackTrace();
		} catch (JsonException e) {
			logger.error(e.getMessage());
			FacesUtils.addErrorMessage(rb.getString("error.json"));
		}
	}

	public List<Mensaje> getMensajes() {
		return mensajes;
	}

	public void setMensajes(List<Mensaje> mensajes) {
		this.mensajes = mensajes;
	}

	public void setCargaService(CargaService cargaService) {
		this.cargaService = cargaService;
	}

	public void setArchivoService(ArchivoService archivoService) {
		this.archivoService = archivoService;
	}

	public void setMensajeriaService(MensajeriaService mensajeriaService) {
		this.mensajeriaService = mensajeriaService;
	}
}